home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / libs / bignum_37_28.lha / BigNum / developpers / clib / BigNum_protos.h
C/C++ Source or Header  |  1997-02-11  |  3KB  |  120 lines

  1. #ifndef CLIB_BIGNUM_PROTOS_H
  2. #define CLIB_BIGNUM_PROTOS_H
  3.  
  4. /*
  5.  *    clib/BigNum_protos.h
  6.  *
  7.  *    © Allenbrand Brice, Ringard'Production 1997
  8. */
  9.  
  10. typedef struct
  11. {
  12.  int signe;
  13.  int nc;
  14.  unsigned short *chiffres;
  15. } BigNum,*PtrBigNum;
  16.  
  17. /* Addition */
  18.  
  19. void BigNumAdd(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  20. void BigNumDigitAdd(PtrBigNum x,int y);
  21.  
  22. /* Division */
  23.  
  24. void BigNumDiv(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  25. void BigNumDigitDiv(PtrBigNum x,int y,PtrBigNum z);
  26. void BigNumRightShift(PtrBigNum x,int Nb);
  27. void BigNumModulo(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  28. void BigNumEDiv(PtrBigNum x,PtrBigNum y,PtrBigNum z,PtrBigNum Rest);
  29.  
  30. /* Multiplication */
  31.  
  32. void BigNumMul(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  33. void BigNumFastMul(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  34. void BigNumDigitMul(PtrBigNum x,int y);
  35. void BigNumLeftShift(PtrBigNum x,int Nb);
  36. void BigNumSquare(PtrBigNum x,PtrBigNum z);
  37.  
  38. /* Substraction */
  39.  
  40. void BigNumSub(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  41. void BigNumDigitSub(PtrBigNum x,int y);
  42.  
  43. /* Displaying */
  44.  
  45. void BigNumDisplay(PtrBigNum z);
  46. void BigNumPrint(PtrBigNum x);
  47.  
  48. /* Conversion */
  49.  
  50. void BigNumStrToBigNum(PtrBigNum x,char *S);
  51. void BigNumToStr(PtrBigNum x,char *y);
  52. void BigNumIntToBigNum(PtrBigNum z,int x);
  53. int BigNumToInt(PtrBigNum z);
  54.  
  55. /* Comparison */
  56.  
  57. short BigNumCompare(PtrBigNum x,PtrBigNum y);
  58. short BigNumFastCompare(PtrBigNum x,PtrBigNum y);
  59.  
  60. /* Prime test */
  61.  
  62. short BigNumDiffCarre(PtrBigNum n,PtrBigNum res,int lim);
  63. short BigNumRho(PtrBigNum n,PtrBigNum res,int lim);
  64. short BigNumBrutePrime(PtrBigNum i,int aff);
  65. short BigNumLucasLehmer(int x);
  66.  
  67. /* Misc. */
  68.  
  69. void BigNumRnd(int n,PtrBigNum z);
  70. void BigNumPgcd(PtrBigNum x,PtrBigNum y,PtrBigNum z);
  71. void BigNumPuiModulo(PtrBigNum x,PtrBigNum y,PtrBigNum z,PtrBigNum t);
  72. short BigNumSqrt(PtrBigNum x,PtrBigNum y);
  73. void BigNumSwap(PtrBigNum x,PtrBigNum y);
  74. void BigNumAssign(PtrBigNum x,PtrBigNum y);
  75. void BigNumPower2(PtrBigNum x,int Nb);
  76.  
  77. /* No more Macro */
  78.  
  79. void BigNumSetNul(PtrBigNum x);
  80. int BigNumSize(PtrBigNum x);
  81. short BigNumIsEven(PtrBigNum x);
  82. short BigNumIsNul(PtrBigNum x);
  83. short BigNumIsPositive(PtrBigNum x);
  84. short BigNumIsNegative(PtrBigNum x);
  85. void BigNumAbsBigNum(PtrBigNum x);
  86.  
  87. /* Alloc/Free */
  88.  
  89. PtrBigNum BigNumInit(void);
  90. void BigNumFree(int i);
  91. short BigNumErrorStatus(void);
  92. void BigNumInfo(void);
  93.  
  94. /* For compatibility to prior versions */
  95.  
  96. #define SetNul(x) {(x)->chiffres[(x)->nc=0]=0;(x)->signe=1;}
  97. #define Size(x) ((x)->nc+1)
  98. #define Even(x) (!((x)->chiffres[0]&1))
  99. #define AbsBigNum(x,y) {Assign(x,y);x->signe=1;}
  100. #define IsPositive(x) ((x)->signe)
  101. #define IsNul(x) (((!(x)->nc)&&(!(x)->chiffres[0]))?1:0)
  102.  
  103. /* Error codes */
  104.  
  105. #define DIVIDE_ZERO        1
  106. #define NO_MEMORY         2
  107. #define TOO_MUCH_BIGNUM     4
  108. #define TOO_MUCH_FREE_BIGNUM    8
  109. #define INVALID_DOS        16
  110. #define INVALID_GRAPHICS    32
  111. #define INVALID_CPU        64
  112. #define BIGNUM_SIZE_TOO_HIGH    128
  113. #define NEGATIVE_SQRT        256
  114. #define PARTIAL_BIGNUM_TO_INT    512
  115. #define NEGATIVE_PGCD        1024
  116. #define ZERO_POWER_ZERO        2048
  117. #define MODULO_ZERO        4096
  118.  
  119. #endif /* CLIB_BIGNUM_PROTOS_H */
  120.